(deftemplate tipIncendiu (slot nume) (slot material))
(deftemplate extinctor (slot ext))
(deftemplate material(slot mat))

(assert (material (mat lemn)))
(assert (material (mat hartie)))
(assert (material (mat petrol)))
(assert (material (mat electronice)))
(assert (material (mat metale)))

(defrule tipA
    ?i <-(material { mat == hartie || mat == lemn }(mat ?m))
    => 
    (assert(tipIncendiu(nume A)(material ?m)))
    (printout t " Incendiul de tipul A cauzat de " ?m  " "  crlf)
    )

(defrule tipB
    ?i <-(material ( mat ?m & :(eq ?m petrol)))
    =>
    (assert(tipIncendiu(nume B)(material ?m)))
    (printout t " Incendiul de tipul B cauzat de " ?m  " "  crlf)  
    )

(defrule tipC
    ?i <-(material ( mat ?m & :(eq ?m electronice)))
    =>
    (assert(tipIncendiu(nume C)(material ?m)))
    (printout t " Incendiul de tipul C cauzat de " ?m  " "  crlf)
    )

(defrule tipD
    ?i <-(material ( mat ?m & :(eq ?m lemn)))
    =>
    (assert(tipIncendiu(nume D)(material ?m)))
    (printout t " Incendiul de tipul D cauzat de " ?m  " "  crlf) 
    )

(defrule extinctorA
    ?i <-(tipIncendiu (nume ?m & :(eq ?m A)))   
    =>   
    (printout t " Incendiul de tipul " ?m " se stinge cu apa sau solutii lichide bazate pe apa, sau solutii chimice de uscare " crlf)    
    )

(defrule extinctorB
    ?i <-(tipIncendiu (nume ?m & :(eq ?m B)))   
    =>   
    (printout t " Incendiul de tipul " ?m " se stinge cu substante chimice de uscare, dioxid de carbon, spuma " crlf)    
    )

(defrule extinctorC
    ?i <-(tipIncendiu (nume ?m & :(eq ?m C)))   
    =>   
    (printout t " Incendiul de tipul " ?m " se stinge cu agent nonconductor de electricitate " crlf)    
    )

(defrule extinctorD
    ?i <-(tipIncendiu (nume ?m & :(eq ?m D)))   
    =>   
    (printout t " Incendiul de tipul " ?m " se stinge cu apa  pulberi de oxizi de bor si cocs ecranat. " crlf)    
    )

(run)